/**
 * This object will be used to hold the details of the products
 * kept in the warehouse.
 * @author sdm21
 *
 */
abstract public class Product {
	
	private String id;
	private String name;
	private double unit_price;
	private double case_price;
	private String type;
	private double abv;
	private String country_origin;
	private int case_size;
	private int quantity;
	
	/**
	 * Creates product object
	 * @param id String of the product's unique code
	 * @param name String of the name of the product
	 * @param unit_price double of the cost per unit of the product
	 * @param case_price double of the cost per case of the product
	 * @param type String of the type of drink this product is
	 * @param abv double of the alcoholic percentage of the product
	 */
	public Product(String id, String name, double unit_price, double case_price, 
			String type, double abv, String country_origin, int case_size, int quantity){
		this.id = id;
		this.name = name;
		this.unit_price = unit_price;
		this.case_price = case_price;
		this.type = type;
		this.abv = abv;
		this.country_origin = country_origin;
		this.case_size = case_size;
		this.quantity = quantity;
	}
	
	/**
	 * Changes quantity value
	 * @param quantity integer
	 */
	public void setQuantity(int quantity){
		this.quantity = quantity;
	}
	
	/**
	 * Returns quantity value
	 * @return int of quantity
	 */
	public int getQuantity(){
		return quantity;
	}
	
	/**
	 * Changes the ID value
	 * @param id String of the unique id code
	 */
	public void setID(String id){
		this.id = id;
	}
	
	/**
	 * Change the name of the product
	 * @param name String of name
	 */
	public void setName(String name){
		this.name = name;
	}
	
	/**
	 * Changes the unit price
	 * @param unit_price double of price
	 */
	public void setUnitPrice(double unit_price){
		this.unit_price = unit_price;
	}
	
	/**
	 * Changes the price of a case of the product
	 * @param case_price double of case price
	 */
	public void setCasePrice(double case_price){
		this.case_price = case_price;
	}
	
	/**
	 * Changes the type of product
	 * @param type String of the product type
	 */
	public void setType(String type){
		this.type = type;
	}
	
	/**
	 * Changes the alcoholic percentage of the product
	 * @param abv double of percentage value
	 */
	public void setABV(double abv){
		this.abv = abv;
	}
	
	/**
	 * return the id of the product
	 * @return
	 */
	public String getID(){
		return id;
	}
	
	/**
	 * return the name of the product
	 * @return
	 */
	public String getName(){
		return name;
	}
	
	/**
	 * return the cost per unit
	 * @return
	 */
	public double getUnitPrice(){
		return unit_price;
	}
	
	/**
	 * return the cost per case
	 * @return
	 */
	public double getCasePrice(){
		return case_price;
	}
	
	/**
	 * return the type of product this is
	 * @return
	 */
	public String getType(){
		return type;
	}
	
	/**
	 * return the alcoholic content of the drink
	 * @return
	 */
	public double getABV(){
		return abv;
	}
	
	/**
	 * returns the country of origin the product is from
	 * @return String of the country
	 */
	public String getCountry(){
		return country_origin;
	}
	
	/**
	 * changes the country of origin of the product
	 * @param country_origin String of the country
	 */
	public void setCountry(String country_origin){
		this.country_origin = country_origin;
	}

	/**
	 * returns the size of the case
	 * @return int case_size
	 */
	public int getCaseSize(){
		return case_size;
	}
	
	/**
	 * changes the value of the case size
	 * @param case_size int of the size of case
	 */
	public void setCaseSize(int case_size){
		this.case_size = case_size;
	}
	
	/**
	 * Returns a string of the details of that product
	 * @return String of details
	 */
	abstract public String printDetails();
}

